package com.xuhuan.example.example018;

/**
 * @author: 徐欢
 * @date: 2023/11/12 18:52
 * @description:
 */
public class Example018 {

    public static void main(String[] args) {
        int num1 = 10, num2 = 20;
        exchangeVariablesTwo(num1, num2);
    }

    /**
     * 不借助第三个变量实现变量互换
     * 原理：如果某个字符（或数值）x与一个数组m进行异或运算得到y，则再用y与m进行异或运算就可以还原为x
     *
     * @param num1
     * @param num2
     */
    public static void exchangeVariables(int num1, int num2) {
        System.out.println("不借助第三个变量实现变量互换");
        System.out.println("变换前：变量1：" + num1 + ",变量2：" + num2);
        num1 = num1 ^ num2;
        num2 = num1 ^ num2;
        num1 = num1 ^ num2;
        System.out.println("变换后：变量1：" + num1 + ",变量2：" + num2);
    }

    /**
     * 借助第三个变量实现变量互换
     *
     * @param num1
     * @param num2
     */
    public static void exchangeVariablesTwo(int num1, int num2) {
        System.out.println("借助第三个变量实现变量互换");
        System.out.println("变换前：变量1：" + num1 + ",变量2：" + num2);
        int num = num1;
        num1 = num2;
        num2 = num;
        System.out.println("变换后：变量1：" + num1 + ",变量2：" + num2);
    }
}
